#ifndef HOMEWINDOW_H
#define HOMEWINDOW_H

#include <QMainWindow>
#include <QThread>
#include <QFile>
#include <QDataStream>
#include <QSharedPointer>
#include <QLabel>
#include <QTimer>

#include <model/parammodel.h>

#include "log/easylogging++.h"
#include "thread/threadtasks.h"
#include "connect/connectmanager.h"
#include "demo.h"
#include "util/realdatamodel.h"
#include "form/formmanager.h"
#include "slotadpter/adptermanager.h"
#include "loaddisplacementchart.h"
#include "displacementchart.h"
#include "loadchart.h"

class BaseTcp;

namespace Ui {
class HomeWindow;
}

class HomeWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit HomeWindow(QWidget *parent = 0);
    ~HomeWindow();

private slots:

    void on_receive_handle_data(QByteArray);

    void onReceiveResult(RealDataModel realDataModel);

    void on_menuSetting_triggered();

    void on_menuStaticFineDebug_triggered();

    void on_menuLongFineDebug_triggered();

    void on_menuActionDebug_triggered();

    void on_menuLongReport_triggered();

    void on_menuStaticCurve_triggered();

    void on_menuNetConnect_triggered();

    void onDisplacementChart();

    void on_btnMainStart_clicked();

    void on_btnMainStop_clicked();

    void on_btnMainServoStart_clicked();

    void on_btnMainServoStop_clicked();

    void on_menu_test();

signals:
//    void ttt(QString ip, int port);
//    void ttt1(QString ip, int port);
//    void etCommand(QString);
//    void etCommand1(QString);

public:
    /*********************************************
    * @brief         摘要
    * @author        Charles
    * @date          2019-06-03
    * @function      刷新网络连接状态
    *********************************************/
    void flushNetStatus(const QString& status);

    /*********************************************
    * @brief         摘要
    * @author        Charles
    * @date          2019-07-31
    * @function      开始闭环试验和测试。
    *********************************************/
    void startRunningTest();

    /*********************************************
    * @brief         摘要
    * @author        Charles
    * @date          2019-07-31
    * @function      停止闭环运行
    *********************************************/
    void stopRunningTest();

private:
    /*********************************************
    * @brief         摘要
    * @author        Charles
    * @date          2019-06-03
    * @function      初始化窗口
    *********************************************/
    void initWindow();

    /*********************************************
    * @brief         摘要
    * @author        Charles
    * @date          2019-06-29
    * @function      初始化资源
    *********************************************/
    void initResource();


    /*********************************************
    * @brief         摘要
    * @author        Charles
    * @date          2019-07-29
    * @function      读取参数配置。
    *********************************************/
    void readConfig();


private:
    //////////////// UI 指针 ////////////////
    Ui::HomeWindow *ui;

    ////////////////主窗口显示网络状态  ////////////////
    QLabel* netStatusLabel;

    //////////////// 管理所有子窗口 ////////////////
    QSharedPointer<FormManager> formManager;

    //////////////// 管理所有信号槽适配器 ////////////////
    QSharedPointer<AdpterManager> adpterManager;

//    Demo demo;
    //////////////// 负荷位移曲线 ////////////////
    QSharedPointer<LoadDisplacementChart> loadDisplaceChart;
    QSharedPointer<DisplacementChart> displacementChart;
    QSharedPointer<LoadChart> loadChart;

    //////////////// connect 管理器 ////////////////
    ConnectManager* connectManager;

    QFile hisfile;
    QDataStream hisStream;

    RealDataModel tcpDataModel;

    ParamModel paramModel;

    //////////////// 实时数据 ////////////////
    float displacementForChart = 0.0;

    QTimer* displacementTimer;
    bool isRunning;

};

#endif // HOMEWINDOW_H
